home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / asxsrc.arc / ASLINK.H < prev    next >
C/C++ Source or Header  |  1989-08-25  |  6KB  |  295 lines

  1. /* aslink.h */
  2.  
  3. /*
  4.  * (C) Copyright 1989
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. /*)BUILD
  13.     $(PROGRAM) =    ASLINK
  14.     $(INCLUDE) =    ASLINK.H
  15.     $(FILES) = {
  16.         LKMAIN.C
  17.         LKLEX.C
  18.         LKAREA.C
  19.         LKHEAD.C
  20.         LKSYM.C
  21.         LKEVAL.C
  22.         LKDATA.C
  23.         LKLIST.C
  24.         LKRLOC.C
  25.         LKS19.C
  26.         LKIHX.C
  27.     }
  28.     $(STACK) = 2000
  29. */
  30.  
  31. /* DECUS C void definition */
  32.  
  33. #ifdef    decus
  34. #define    VOID    char
  35. #else
  36. #define    VOID    void
  37. #endif
  38.  
  39. /*
  40.  * Case Sensitivity Flag
  41.  */
  42. #define    CASE_SENSITIVE    1
  43.  
  44. /*
  45.  * This file defines the format of the
  46.  * relocatable binary file.
  47.  */
  48.  
  49. #define    NCPS    8        /* characters per symbol */
  50. #define    NDATA    16        /* actual data */
  51. #define    NINPUT    128        /* Input buffer size */
  52. #define    NHASH    64        /* Buckets in hash table */
  53. #define    HMASK    077        /* Hash mask */
  54. #define    NLPP    60        /* Lines per page */
  55. #define    NTXT    16        /* T values */
  56. #define    FILSPC    16        /* File spec length */
  57.  
  58. /*
  59.  * Relocation types.
  60.  */
  61. #define  R_WORD    0    /* 16 bit */
  62. #define     R_BYTE 01
  63.  
  64. #define     R_AREA    0    /* Base type */
  65. #define  R_SYM    02
  66.  
  67. #define     R_NORM    0    /* PC adjust */
  68. #define     R_PCR    04
  69.  
  70. /*
  71.  * Global symbol types.
  72.  */
  73. #define    S_REF    1        /* referenced */
  74. #define    S_DEF    2        /* defined */
  75.  
  76. /*
  77.  * Area types
  78.  */
  79. #define    A_CON    000        /* concatenate */
  80. #define    A_OVR    004        /* overlay */
  81. #define    A_REL    000        /* relocatable */
  82. #define    A_ABS    010        /* absolute */
  83.  
  84. /*
  85.  * File types
  86.  */
  87. #define    F_STD    1        /* stdin */
  88. #define    F_LNK    2        /* File.lnk */
  89. #define    F_REL    3        /* File.rel */
  90.  
  91. typedef unsigned addr_t;
  92.  
  93. struct    head
  94. {
  95.     struct    head   *h_hp;    /* Header link */
  96.     struct    lfile  *h_lfile;/* Associated file */
  97.     int    h_narea;    /* # of areas */
  98.     VOID    **a_list;    /* Area list */
  99.     int    h_nglob;    /* # of global symbols */
  100.     VOID    **s_list;    /* Globle symbol list */
  101.     char    m_id[NCPS];    /* Module name */
  102. };
  103.  
  104. struct    area
  105. {
  106.     struct    area    *a_ap;    /* Area link */
  107.     struct    areax    *a_axp;    /* Area extension link */
  108.     addr_t    a_addr;        /* Beginning address of area */
  109.     addr_t    a_size;        /* Total size of the area */
  110.     char    a_type;        /* Area subtype */
  111.     char    a_flag;        /* Flag byte */
  112.     char    a_id[NCPS];    /* Name */
  113. };
  114.  
  115. struct    areax
  116. {
  117.     struct    areax    *a_axp;    /* Area extension link */
  118.     addr_t    a_addr;        /* Beginning address of section */
  119.     addr_t    a_size;        /* Size of the area in section */
  120. };
  121.  
  122. struct    sym
  123. {
  124.     struct    sym    *s_sp;    /* Symbol link */
  125.     struct    areax    *s_axp;    /* Symbol area link */
  126.     char    s_type;        /* Symbol subtype */
  127.     char    s_flag;        /* Flag byte */
  128.     addr_t    s_addr;        /* Address */
  129.     char    s_id[NCPS];    /* Name */
  130. };
  131.  
  132. struct    lfile
  133. {
  134.     struct    lfile    *f_flp;    /* lfile link */
  135.     int    f_type;        /* File type */
  136.     char    *f_idp;        /* Pointer to file spec */
  137. };
  138.  
  139. struct    base
  140. {
  141.     struct    base  *b_base;    /* Base link */
  142.     char          *b_strp;    /* String pointer */
  143. };
  144.  
  145. struct    globl
  146. {
  147.     struct    globl *g_globl;    /* Global link */
  148.     char          *g_strp;    /* String pointer */
  149. };
  150.  
  151. #define    LETTER    0
  152. #define    DIGIT    1
  153. #define    BINOP    2
  154. #define ETC    3
  155. #define    ILL    4
  156. #define    SPACE    5
  157.  
  158. /* Variable definitions */
  159.  
  160. extern        char    *_abs_;
  161. extern        char    *dext;
  162. extern        char    *ip;
  163. extern        char    ib[NINPUT];
  164. extern        char    ctype[];
  165.  
  166. #if    CASE_SENSITIVE
  167. #else
  168. extern        char    ccase[];
  169. #endif
  170.  
  171. extern    struct    lfile    *startp;
  172. extern    struct    lfile    *linkp;
  173. extern    struct    lfile    *lfp;
  174. extern    struct    lfile    *filep;
  175. extern    struct    lfile    *cfp;
  176. extern    struct    head    *headp;
  177. extern    struct    head    *hp;
  178. extern    struct    area    *areap;
  179. extern    struct    area    *ap;
  180. extern    struct    areax    *axp;
  181. extern    struct    sym    *symhash[NHASH];
  182. extern    struct    base    *basep;
  183. extern    struct    base    *bsp;
  184. extern    struct    globl    *globlp;
  185. extern    struct    globl    *gsp;
  186.  
  187. extern        FILE    *sfp;
  188. extern        FILE    *ofp;
  189. extern        FILE    *mfp;
  190. extern        int    inpfil;
  191. extern        int    cfile;
  192. extern        int    oflag;
  193. extern        int    sflag;
  194. extern        int    mflag;
  195. extern        int    xflag;
  196. extern        int    pflag;
  197. extern        int    radix;
  198. extern        int    hilo;
  199. extern        int    pass;
  200. extern        int    line;
  201. extern        int    page;
  202. extern        int    lop;
  203. extern        int    rtcnt;
  204. extern        int    rtval[];
  205.  
  206. /* C Library function definitions */
  207. /* for reference only
  208. extern    VOID *        calloc();
  209. extern    VOID        exit();
  210. extern    int        fclose();
  211. extern    char *        fgets();
  212. extern    FILE *        fopen();
  213. extern    int        fprintf();
  214. extern    VOID        free();
  215. extern    VOID *        malloc();
  216. extern    char        putc();
  217. extern    char *        strcpy();
  218. extern    int        strlen();
  219. extern    char *        strncpy();
  220. */
  221.  
  222. /* Program function definitions */
  223.  
  224. /* lkmain.c */
  225. extern    FILE *        afile();
  226. extern    VOID        bassav();
  227. extern    VOID        gblsav();
  228. extern    VOID        link();
  229. extern    VOID        main();
  230. extern    VOID        map();
  231. extern    int        parse();
  232. extern    VOID        setbas();
  233. extern    VOID        setgbl();
  234. extern    VOID        usage();
  235.  
  236. /* lklex.c */
  237. extern    char        endline();
  238. extern    char        get();
  239. extern    VOID        getfid();
  240. extern    VOID        getid();
  241. extern    int        getline();
  242. extern    char        getmap();
  243. extern    char        getnb();
  244. extern    int        more();
  245. extern    VOID        skip();
  246. extern    VOID        unget();
  247.  
  248. /* lkarea.c */
  249. extern    VOID        lkparea();
  250. extern    VOID        lnkarea();
  251. extern    VOID        lnksect();
  252. extern    VOID        newarea();
  253.  
  254. /* lkhead.c */
  255. extern    VOID        module();
  256. extern    VOID        newhead();
  257.  
  258. /* lksym.c */
  259. extern    int        hash();
  260. extern    struct    sym *    lkpsym();
  261. extern    VOID *        new();
  262. extern    struct    sym *    newsym();
  263. extern    VOID        symdef();
  264. extern    int        symeq();
  265. extern    VOID        syminit();
  266. extern    VOID        symmod();
  267. extern    int        symval();
  268.  
  269. /* lkeval.c */
  270. extern    int        digit();
  271. extern    int        eval();
  272. extern    int        expr();
  273. extern    int        oprio();
  274. extern    int        term();
  275.  
  276. /* lklist.c */
  277. extern    VOID        lstarea();
  278. extern    VOID        newpag();
  279. extern    VOID        slew();
  280.  
  281. /* lkrloc.c */
  282. extern    int        add_b();
  283. extern    int        add_w();
  284. extern    int        evword();
  285. extern    VOID        rele();
  286. extern    VOID        reloc();
  287. extern    VOID        relr();
  288. extern    VOID        relt();
  289.  
  290. /* lks19.c */
  291. extern    VOID        s19();
  292.  
  293. /* lkihx.c */
  294. extern    VOID        ihx();
  295.